# 使用reduce取出lst里的数字
from functools import reduce

lst1 = ['a', '1', '2bb', '234', '', '9']
print(reduce(lambda x, y: x + y, list(filter(lambda x: x.isdigit(), lst1))))

# 正数在前，负数在后，正数从小到大，负数从大到小
lst2 = [7, -8, 5, 4, 0, -2, -5]
print(list(sorted(lst2, key=lambda x: x * -1 + 8 if x <= 0 else x)))

# 字符串排序，排序规则：小写<大写<奇数<偶数(原理：先比较元组的第一个值)
s = 'asdf234GDSdsf23'


def sort(s):
    for i in s:
        if i.isalpha():
            if i.islower():
                return (False, False, i)
            else:
                return (False, True, i)
        else:
            if int(i) % 2 == 1:
                return (True, False, i)
            else:
                return (True, True, i)


print(list(sorted(s, key=sort)))
